package com.yyw.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yyw.bean.ShoppingCart;
import com.yyw.dao.ShoppingCartDao;
import com.yyw.service.ShoppingCartService;
import com.yyw.utils.BaseContext;
import jdk.nashorn.internal.ir.annotations.Ignore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Transactional
public class ShoppingCartServiceImpl implements ShoppingCartService {

    @Autowired
    private ShoppingCartDao shoppingCartDao;

    /**
     * 加入购物车
     * 1. 加入购物车，不能直接认为就是简单的往表里面添加一条记录即可。
     * 2. 还需要判定，现在要添加的这个菜品 | 套餐，在购物车里面有还是没有。如果没有直接添加，如果有，就改变数量。
     * 2.1 先查询购物车表里面有没有这个菜|套餐
     * 2.2 处理使用菜品id 或者套餐id来查询之外，还要附加上 用户id来查询。
     * 3. 如果查询出来有数据 ， 把数量 修改一下： 执行更新操作。
     * 4. 如果查询出来没有数据，执行添加操作即可。
     *
     * @param shoppingCart
     * @return
     */
    @Override
    public ShoppingCart add(ShoppingCart shoppingCart) {
        //
        LambdaQueryWrapper<ShoppingCart> lqw = new LambdaQueryWrapper<ShoppingCart>();

        //
        lqw.eq(ShoppingCart::getUserId, BaseContext.getCurrentId());

        //
        if (shoppingCart.getDishId() != null) {
            lqw.eq(ShoppingCart::getDishId, shoppingCart.getDishId());
        } else {
            lqw.eq(ShoppingCart::getSetmealId, shoppingCart.getSetmealId());
        }

        ShoppingCart cartInDB = shoppingCartDao.selectOne(lqw);

        if (cartInDB != null) {
            //
            cartInDB.setNumber(cartInDB.getNumber() + 1);
            //
            shoppingCartDao.updateById(cartInDB);

            return cartInDB;
        }
        //
        //
        //
        shoppingCart.setUserId(BaseContext.getCurrentId());
        //
        shoppingCart.setCreateTime(LocalDateTime.now());
        //
        shoppingCart.setNumber(1);
        //
        shoppingCartDao.insert(shoppingCart);

        return shoppingCart;

    }

    /**
     * 根据用户id查询购物车
     *
     * @return
     */
    @Override
    public List<ShoppingCart> list() {
        //
        LambdaQueryWrapper<ShoppingCart> lqw = new LambdaQueryWrapper<>();

        //
        lqw.eq(ShoppingCart::getUserId, BaseContext.getCurrentId());

        //
        return shoppingCartDao.selectList(lqw);
    }

    /**
     * 清空购物车
     *
     * @return
     */
    @Override
    public int clean() {
        LambdaQueryWrapper<ShoppingCart> lqw = new LambdaQueryWrapper<>();

        //
        lqw.eq(ShoppingCart::getUserId, BaseContext.getCurrentId());

        return shoppingCartDao.delete(lqw);
    }
}
